/**
  ******************************************************************************
  * @file    main.c
  * @author  ashuai0110
  * @version V1.0
  * @date    2024-01-28
  * @brief   使用举例-非阻塞延时
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module
  *
  ******************************************************************************
  */

/* 包含头文件-----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "tim.h"

#include "delay_no_block.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有类型定义---------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/
static delay_id_t singleDelay; /* 单次延时ID */
static delay_id_t cycleDelay;  /* 周期延时ID */

/* 全局变量-------------------------------------------------------------------*/

/* 私有函数原型---------------------------------------------------------------*/


/**
  * @brief  定时器1中断函数
  *
  * @param  None
  *
  * @retval None
  */
void TIM1_UP_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) 
    {
        /* 组件计时节拍接口 */
        module_tick_inc(1);
        
        TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
    }
}

/**
  * @brief  main
  */
int main(int argc, char *argv[])
{
    VERSION_LOG("example-delay_no_block", 1, 0, 0);
    
    /* 定时器初始化 1ms */
    tim1_init_config(100-1, 720-1);

    uint8_t ret = 0;
    /* 延时初始化 500ms */
    ret = delay_init(&singleDelay, 500);
    if(RET_OK != ret) { ERROR_LOG("delay_init failure"); }
    ret = delay_init(&cycleDelay, 500);
    if(RET_OK != ret) { ERROR_LOG("delay_init failure"); }

    while(1)
    {
        /* 等待延时任务返回完成 */
        if(RET_OK == delay_wait(&singleDelay))
        {
            PRINT_LOG("single delay\r\n");
            /* 延时取消 */
            delay_de_init(&singleDelay);
        }
        
        if(RET_OK == delay_wait(&cycleDelay))
        {
            PRINT_LOG("cycle delay\r\n");
            /* 延时重新配置 */
            delay_init(&cycleDelay, 500);
        }
    }
}

